StupidBeauty
Read times:340Posted at:Wed Nov 17 11:07:19 2010 - no title specified

Qt4.7.0文档翻译:QSqlRelationalTableModel类参考, QSqlRelationalTableModel Class Reference

QSqlRelationalTableModel类为一个单个的数据库表提供一个带外键支持的可编辑的数据模型。

QSqlRelationalTableModel表现得像 QSqlTableModel 一样 ,但是允许一些列 被设置为其它数据库表中的外键。

左边的截屏展示的是一个 QTableView 中的一个普通 QSqlTableModel 。外 键( city country )没有被解释为人类可读的值。右边的截屏展示的是一个QSqlRelationalTableModel ,外 键已经被解释为人类可读的文本字符串。

下面的代码片段展示了QSqlRelationalTableModel 是如何设置的

model->setTable("employee");

model->setRelation(2, QSqlRelation("city", "id", "name"));

model->setRelation(3, QSqlRelation("country", "id", "name"));

这些 setRelation ()函数的调用建立了两个表之间的关系 。第一个调用指定表 employee 中的第2 列是映射为表 city id 域的外键,而且视图应当向用户显示 city name 域。第二个调用对第3 列进行类似的动作

如果你使用一个可读写的QSqlRelationalTableModel ,你可能想要在视图上使用 QSqlRelationalDelegate 。与默认代表不同的是 QSqlRelationalDelegate 为那些是其它表的外 键的域提供一个组合框。要使用这个类 ,简单地带着一个 QSqlRelationalDelegate 类的实例在视图上调用 QAbstractItemView::setItemDelegate ()

QTableView *view = new QTableView;

view->setModel(model);

view->setItemDelegate(new QSqlRelationalDelegate(view));

sql/关系表模型 示例展示了如何使用QSqlRelationalTableModel 和 QSqlRelationalDelegate 来为表提供外 键支持。

注意

  • •.表必须有一个主键。

  • •.表的主键不能包含到另一个表的关系

  • •.如果一个关系表包含引用了在引用的表中不存在的行的键,那些包含不可用的 键的行将不会通过模型暴露出来。用户或者数据库有责任保 持引用完整性。

  • •. 如果一个关系的显示列名也在主表中用作一个列名 ,或者它在多于一个关系中 被用于显示列名,那么它会被进行别名处理。别名是关系的表名与显示列名用一个下划线连接在一起 (例如tablename_columnname)。当重复 被探测到时,所有发生重复的显示列名都被进行别名处理,但是主表中的列名不会进行别名处理 。别名处理不影响 QSqlRelation ,所以 QSqlRelation::displayColumn ()会返回原始的显示列名,但是 QSqlRecord::fieldName ()会返回别名。

  • •. 当使用 setData ()时 ,角色必须是 Qt::EditRole 。当使用 data ()时,角色必须是 Qt::DisplayRole

参见 QSqlRelation QSqlRelationalDelegate 关系表模型示例

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4